<?php
/**
 * Classes utilitárias para a aplicação
 * @author		João Batista Neto
 * @package		rpo
 * @subpackage	util
 */
namespace rpo\util;

use \ArrayAccess;
use rpo\base\Object;

/**
 * Interface para definição de uma lista
 * @author		João Batista Neto
 * @package		rpo
 * @subpackage	util
 */
interface Lists extends Collection, ArrayAccess {
	/**
	 * Recupera um elemento associado ao $offset na lista
	 * @param integer $offset
	 * @return Object
	 */
	public function get( $offset );

	/**
	 * Recupera a posição do elemento na lista
	 * @param Object $o
	 * @return integer
	 * @see Lists::get()
	 */
	public function indexOf( Object $o );

	/**
	 * Recupera a última posição do elemento na lista
	 * @param Object $o
	 * @return integer
	 * @see Lists::indexOf()
	 */
	public function lastIndexOf( Object $o );

	/**
	 * Recupera um ListIterator para os elementos da lista
	 * @param integer $fromIndex
	 * @return ListIterator
	 */
	public function listIterator( $fromIndex = 0 );

	/**
	 * Redefine um elemento na posição $offset
	 * @param integer $offset
	 * @param Object $o
	 * @return Object
	 */
	public function set( $offset , Object $o );

	/**
	 * Cria uma sub-lista da lista atual
	 * @param $fromIndex
	 * @param $toIndex
	 * @return Lists
	 */
	public function subList( $fromIndex , $toIndex );
}